//MayBe 函子
class MayBe {
    static of (value) {
        return new MayBe(value);
    }

    constructor (value) {
        this._value = value;
    }

    map (fn) {
        //先判断数据是否为null或undefined
        return this.isNothing() ? MayBe.of(null) : MayBe.of(fn(this._value));
    }

    //用于判断null 或 undefined
    isNothing () {
        return this._value === null || this._value === undefined;
    }

}

//正常数据测试
// let r = MayBe.of('Hello World')
//     .map(x => x.toUpperCase());
// console.log(r);

//测试null / undefined
// let r = MayBe.of(null)
//     .map(x => x.toUpperCase());
// console.log(r);


//多次调用map函数时， 无法确定出现空值的地方
let r = MayBe.of('hello world')
    .map(x => x.toUpperCase())
    .map(x => null)
    .map(x => x.split(' '));
console.log(r);
